package com.zr.service.impl;

import com.zr.controller.R.Code;
import com.zr.dao.UserDao;
import com.zr.exception.SystemException;
import com.zr.pojo.User;
import com.zr.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

@Service
@AllArgsConstructor
public class UserServiceImpl implements UserService {

    private UserDao userDao;

//    注册用户
    @Override
    public Boolean regUser(User user) {
        String md5pw = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        user.setPassword(md5pw);
        //判断数据库是否存在同名用户
        User userDB = userDao.selectByUsername(user.getUsername());
        if(userDB != null){
            return false;
        }
//        System.out.println(user);
        int insert = userDao.insert(user);
        if (insert != 1) {
            throw new SystemException(Code.SYSTEM_ERR, "注册失败");
        }
        return true;
    }


//      用户登录
    @Override
    public Boolean login(User user) {
        User userDB = userDao.selectByUsername(user.getUsername());
//        用户名不存在
        if(userDB == null){
            return false;
        }
//        用户密码错误
        String md5pw = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        if(!md5pw.equals(userDB.getPassword())){
            return false;
        }
//        用户登录成功，在表现层返回的result添加token属性值。
        return true;
    }

//    根据用户名查询
    @Override
    public User getByUserName(String userName) {
        User user = userDao.selectByUsername(userName);
//        客户端查询用户时返回结果把密码置空以保证账号安全
        user.setPassword("");
        return user;
    }

//    修改用户基本信息
    @Override
    public Boolean updateUser(User user){
        return userDao.updateUser(user)==1;
    }

//    修改用户密码
    @Override
    public Boolean updateUserPwd(String oldPwd, String newPwd, String username) {
        //将输入的旧密码转化成md5格式
        String md5oldPw = DigestUtils.md5DigestAsHex(oldPwd.getBytes());
        //判断旧密码是否正确
        if (!userDao.selectByUsername(username).getPassword().equals(md5oldPw)){
            return false;
        }
        //将输入的新密码转化成md5格式并存储进数据库
        String md5newPwd = DigestUtils.md5DigestAsHex(newPwd.getBytes());
        return (userDao.updateUserPwd(md5newPwd, username) == 1);
    }

    @Override
    public Boolean updateUserPic(String user_pic, String username) {
        return userDao.upadateUserPic(user_pic, username) == 1;
    }
}
